/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pck_tramitedocu.pck_src.pck_pojos;

import org.springframework.dao.*;
import pck_tramitedocu.pck_src.pck_utiles.Cls_Parametros;
import pck_tramitedocu.pck_src.pck_utiles.cls_utilitarios;
import pck_tramitedocu.pck_web.svl_gestion_facade_web;

/**
 * Excepción que gestiona todos los erorres que puedan surgir en el sistema
 * de Trámite Documentario, desde el modelo hasta el controlador.
 * @author Josema
 */
public class TramiteDocuException extends Exception {

    /**
     * Variable {@code String} que contiene el nombre de la clase de la excepción
     * capturada
     */
    String systemException;
    
    /**
     * Variable {@code String} que contiene el mensaje a mostrar en la vista.
     */
    String userException;

    /**
     * Constructor por defecto. La excepción a usar es de la clase
     * {@code Exception}
     */
    public TramiteDocuException() {
        this("Exception");
    }

    /**
     * Constructor que especifica la excepción a recuperar.
     * @param exceptionName     El nombre de la excepción capturada, en
     * {@code String}.
     */
    public TramiteDocuException(String exceptionName) {
        this.systemException = exceptionName;
        this.userException = this.getUserExceptionDB();
    }

    /**
     *
     * @return
     */
    public String getSystemException() {
        return systemException;
    }

    /**
     *
     * @param systemException
     */
    public void setSystemException(String systemException) {
        this.systemException = systemException;
    }

    /**
     *
     * @return
     */
    public String getUserException() {
        return userException;
    }

    /**
     *
     * @param userException
     */
    public void setUserException(String userException) {
        this.userException = userException;
    }

    /**
     * Recupera el mensaje a mostrar en la vista desde la base de datos.
     * @return
     */
    private String getUserExceptionDB() {
        String[] param;
        String mensaje;
        try {
            do {
                param = new String[]{Cls_Parametros.Map_ERROR, systemException};
                mensaje = svl_gestion_facade_web.getFacade().obtenerErrorUsuarioFacade(
                        cls_utilitarios.generarHashMapParaRequest(new String[][]{param}));
                if (mensaje == null) {
                    systemException = Class.forName(systemException).getSuperclass().getSimpleName();
                }
            } while (mensaje == null);
        } catch (DataAccessException ex) {
            return "HUBO UN ERROR AL CONECTAR A LA BASE DE DATOS";
        } catch (ClassNotFoundException ex) {
            return "HUBO UN ERROR AL CONECTAR A LA BASE DE DATOS";
        }
        return mensaje;
    }

    public void doSomething() {

    }
}
